/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package control;

import model.Disciplina;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Date;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 *
 * @author farzin
 */
public class ExtractionDiscOferecGeral {

    private final ArrayList<Disciplina> oferecidas;

    public ExtractionDiscOferecGeral() {
        this.oferecidas = new ArrayList<>();
    }

    public ArrayList extractDiscOferecGeral(String url) {

        Document doc = null;
        try {

            try {
                //Documento que recebe o html da página a ser extraida
                doc = Jsoup.connect(url).get();
            } catch (IOException ex) {    //tratamento de exceção quando a URL não existe
                appendToFile(ex);
                return oferecidas;
            } catch (Exception ex) {    //tratamento de exceção para o caso de exceção genérica
                appendToFile(ex);
                return oferecidas;
            }

            //           String[] s = sigla.text().split("  ");
//     public static void main(String[] args) throws IOException {
//        String url1 = "http://www.dac.unicamp.br/sistemas/horarios/grad/G1S0/";        
//        String[] url2 = {"CEL","FCA","FCM","FE","FEA","FEAGRI","FEC","FEEC","FEF","FEM","FENF",
//            "FEQ","FOP","FT","IA","IB","IC","IE","IEL","IFCH","IFGW","IG","IMECC","IQ","REIT"};
//        String url3 = ".htm";
            //           for (int x = 0; x < 25; x++) {
//             Document doc = Jsoup.connect(url1+url2[x]+url3).get();
//             Elements sigla = doc.select("a[href]");    
            Elements sigla = doc.select("a[href]");

            String[] s = sigla.text().split("  ");

            for (String src : s) {
                Disciplina d;
                String[] s2 = src.split(" ", 2);
                d = new Disciplina(s2[0], s2[1]);
                d.setOferecimento(true);
//                print("%s -> %s\n",s2[0],s2[1]);
                oferecidas.add(d);
            }
            //         }
            return oferecidas;
        } catch (NullPointerException ex) { //tratamento de exceção para página em branco.
            appendToFile(ex);
            return oferecidas;
        } catch (Exception ex) {    //tratamento de exceção para erro genérico 2.
            appendToFile(ex);
            return oferecidas;
        }
    }

    private static void print(String msg, Object... args) {
        System.out.println(String.format(msg, args));
    }
    
    public static void appendToFile(Exception ex) {
        Date d = new Date();
        try {
            FileWriter fstream = new FileWriter("exception.txt", true);
            BufferedWriter out = new BufferedWriter(fstream);
            PrintWriter pWriter = new PrintWriter(out, true);
            pWriter.println(d + ": ");
            pWriter.println("Class: Extraction");
            ex.printStackTrace(pWriter);
            pWriter.println();
        } catch (Exception ie) {
            throw new RuntimeException("Could not write Exception to file", ie);
        }
    }
}
